home *** CD-ROM | disk | FTP | other *** search
/ Logiciels PC 7 / logiciel pc 7.iso / Linux / Prog_Gtk / element.c < prev    next >
C/C++ Source or Header  |  1999-02-08  |  3KB  |  89 lines

  1. #include "element.h"
  2.  
  3. /*
  4.  * La liste des images presente sur la jaquette
  5.  * on ne peut depasser 10 images pour l'instant
  6.  */
  7. objetImage listImages[10];
  8. int nbElem;
  9.  
  10. extern GdkPixmap *pixmap;
  11. extern GtkWidget* window;
  12. extern GtkWidget *zoneDessin;
  13.  
  14.  
  15. /* Cree une nouvelle image a partir du fichier nomFichier
  16.  * et l'ajoute dans la liste listImages.
  17.  */
  18. void createImage (char* nomFichier)
  19. {
  20.     FILE* fichier;
  21.     GtkStyle *style;
  22.     int res=0;
  23.     
  24.         /* On verifie que l'on n'a pas deja plus de 10 images.
  25.          * Attention, on ne verifie pas si l'image a bien pu
  26.          * etre chargee !!!
  27.          */
  28.     if (nbElem < 10)
  29.     {
  30.             /* On recupere le style de la fenetre de base */
  31.         style = gtk_widget_get_style( window );
  32.         
  33.             /* On cree un pixmap a partir de l'image selectionnee */
  34.         listImages[nbElem].pixmap =
  35.             gdk_pixmap_create_from_xpm(window->window,
  36.                                        &listImages[nbElem].mask,
  37.                                        NULL, 
  38.                                        nomFichier );
  39.         
  40.             /* petite bidouille pour recuperer la taille de l'image
  41.              */
  42.         fichier = fopen(nomFichier, "r");
  43.         while ((res=fgetc(fichier))!= (int)'\"') {}
  44.         fscanf (fichier, "%d %d", &listImages[nbElem].largeur,
  45.                 &listImages[nbElem].hauteur);
  46.         close(fichier);
  47.  
  48.             /* Par defaut, on positionne l'image dans le coin
  49.              * superieur gauche.*/
  50.         listImages[nbElem].posX=0;
  51.         listImages[nbElem].posY=0;
  52.  
  53.             /* On incremente le nombre d'elements */
  54.         nbElem++;
  55.     }
  56. }
  57.  
  58.  
  59. /* On affiche l'image obj dans la pixmap servant au
  60.  * double buffer.
  61.  */
  62. void afficherImage(objetImage* obj, GtkWidget* zone)
  63. {
  64.     GdkGC *gc;
  65.  
  66.         /* On recupere le graphic contest */
  67.     gc = zone->style->fg_gc[GTK_STATE_NORMAL];
  68.  
  69.         /* On recupere le mask pour l'image
  70.          * Cela permet de gerer la transparence d'une image
  71.          */
  72.     gdk_gc_set_clip_mask (gc, obj->mask);
  73.  
  74.         /* on modifie la position initial du mask */
  75.     gdk_gc_set_clip_origin (gc, obj->posX, obj->posY);
  76.  
  77.         /* On dessine l'image dans la pixmap */
  78.     gdk_draw_pixmap (pixmap,
  79.                      zone->style->fg_gc[GTK_STATE_NORMAL],
  80.                      obj->pixmap,
  81.                      0, 0,
  82.                      obj->posX, obj->posY,
  83.                      obj->largeur, obj->hauteur);
  84.     
  85.         /* On efface le mask */
  86.     gdk_gc_set_clip_mask (gc, NULL);
  87. }
  88.  
  89.